main.js ➔ deleteButtonShow   A
last analyzed

Complexity

Conditions 4

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 11
dl 0
loc 18
rs 9.85
c 0
b 0
f 0
1
"use strict";
2
3
sodium.ready.then(function() {
4
5
const ae = new AllEars(function(ok) {
6
	if (ok) {
7
		document.getElementById("btn_enter").disabled = false;
8
	} else {
9
		document.getElementById("begin_message").hidden = false;
10
		document.getElementById("begin_message").textContent = "Failed init";
11
	}
12
});
13
14
let page=0;
15
16
function navMenu(num) {
17
	document.getElementById("div_readmsg").hidden = true;
18
19
	const b = document.getElementsByTagName("nav")[0].getElementsByTagName("button");
20
	const d = document.getElementsByClassName("maindiv");
21
22
	for (let i = 0; i < 5; i++) {
23
		if (i === num) {
24
			b[i].disabled = true;
25
			d[i].hidden = false;
26
		} else {
27
			b[i].disabled = false;
28
			d[i].hidden = true;
29
		}
30
	}
31
}
32
33
function getCountryFlag(countryCode) {
34
	return sodium.to_string(new Uint8Array([
35
		240, 159, 135, 166 + countryCode.codePointAt(0) - 65,
36
		240, 159, 135, 166 + countryCode.codePointAt(1) - 65
37
	]));
38
}
39
40
function deleteButtonShow(show) {
41
	if (show) {
42
		document.getElementById("btn_msgdel").hidden = false;
43
		return;
44
	}
45
46
	const checkboxes = document.getElementById("tbd_inbox").getElementsByTagName("input");
47
	let checked = false;
48
49
	for (let j = 0; j < checkboxes.length; j++) {
50
		if (checkboxes[j].checked) {
51
			checked = true;
52
			break;
53
		}
54
	}
55
56
	document.getElementById("btn_msgdel").hidden = !checked;
57
}
58
59
function addIntMessage(i) {
60
	const tbl = document.getElementById("tbd_inbox");
61
	const row = tbl.insertRow(-1);
62
63
	const ts = Number(ae.getIntMsgTime(i));
64
	let cell = row.insertCell(-1);
65
	cell.setAttribute("data-ts", ts);
66
	cell.textContent = new Date(ts).toISOString().slice(0, 16).replace("T", " ");
67
	cell.className = "mono";
68
69
	cell = row.insertCell(-1);
70
	cell.textContent = ae.getIntMsgTitle(i);
71
	cell.onclick = function() {
72
		navMenu(-1);
73
		document.getElementById("div_readmsg").hidden = false;
74
		document.getElementById("readmsg_head").hidden = false;
75
		document.getElementById("readmsg_level").hidden = false;
76
		document.getElementById("readmsg_extmsg").hidden = true;
77
78
		document.getElementById("readmsg_title").textContent = ae.getIntMsgTitle(i);
79
		document.getElementById("readmsg_from").textContent  = ae.getIntMsgFrom(i);
80
		document.getElementById("readmsg_to").textContent    = ae.getIntMsgTo(i);
81
		document.getElementById("readmsg_body").textContent  = ae.getIntMsgBody(i);
82
		document.getElementById("readmsg_level").textContent = ae.getIntMsgAdmin(i) ? " (Administrator)" : "";
83
84
		document.getElementById("readmsg_from").className = (ae.getIntMsgFrom(i).length === 16) ? "mono" : "";
85
		document.getElementById("readmsg_to").className = (ae.getIntMsgTo(i).length === 16) ? "mono" : "";
86
	};
87
88
	// empty From1 cell
89
	row.insertCell(-1);
90
91
	cell = row.insertCell(-1);
92
	cell.textContent = ae.getIntMsgFrom(i);
93
	cell.className = (ae.getIntMsgFrom(i).length === 16) ? "mono" : "";
94
95
	cell = row.insertCell(-1);
96
	cell.textContent = ae.getIntMsgTo(i);
97
	cell.className = (ae.getIntMsgTo(i).length === 16) ? "mono" : "";
98
99
	cell = row.insertCell(-1);
100
	const el = document.createElement("input");
101
	el.className = "delMsg";
102
	el.type = "checkbox";
103
	el.setAttribute("data-id", ae.getIntMsgId(i));
104
	el.onchange = function() {deleteButtonShow(this.checked);};
105
	cell.appendChild(el);
106
}
107
108
function addExtMessage(i) {
109
	const tbl = document.getElementById("tbd_inbox");
110
	const row = tbl.insertRow(-1);
111
112
	const ts = Number(ae.getExtMsgTime(i));
113
	let cell = row.insertCell(-1);
114
	cell.setAttribute("data-ts", ts);
115
	cell.textContent = new Date(ts).toISOString().slice(0, 16).replace("T", " ");
116
	cell.className = "mono";
117
118
	cell = row.insertCell(-1);
119
	cell.textContent = ae.getExtMsgTitle(i);
120
	cell.onclick = function() {
121
		navMenu(-1);
122
		document.getElementById("div_readmsg").hidden = false;
123
		document.getElementById("readmsg_head").hidden = false;
124
		document.getElementById("readmsg_level").hidden = true;
125
		document.getElementById("readmsg_extmsg").hidden = false;
126
		document.getElementById("readmsg_greet").textContent = ae.getExtMsgGreet(i);
127
		document.getElementById("readmsg_tls").textContent = ae.getExtMsgTLS(i);
128
		document.getElementById("readmsg_ip").textContent = ae.getExtMsgIp(i);
129
130
		document.getElementById("readmsg_country").textContent = getCountryFlag(ae.getExtMsgCcode(i));
131
		document.getElementById("readmsg_country").title = ae.getExtMsgCname(i);
132
133
		const flags = document.getElementById("readmsg_flags").children;
134
		flags[0].hidden = ae.getExtMsgFlagPExt(i);
135
		flags[1].hidden = !ae.getExtMsgFlagRare(i);
136
		flags[2].hidden = !ae.getExtMsgFlagFail(i);
137
		flags[3].hidden = !ae.getExtMsgFlagPErr(i);
138
139
		document.getElementById("readmsg_title").textContent = ae.getExtMsgTitle(i);
140
		document.getElementById("readmsg_from").textContent = ae.getExtMsgEnvFrom(i);
141
		document.getElementById("readmsg_to").textContent = ae.getExtMsgEnvTo(i);
142
		document.getElementById("readmsg_body").innerHTML = ae.getExtMsgBody(i, false);
143
		document.getElementById("readmsg_headers").textContent = ae.getExtMsgHeaders(i);
144
145
		document.getElementById("readmsg_from").className = "";
146
		document.getElementById("readmsg_to").className = (ae.getExtMsgEnvTo(i).length === 16) ? "mono" : "";
147
	};
148
149
	const from = ae.getExtMsgHdrFrom(i);
150
	const from2 = from.substring(from.indexOf("@") + 1);
151
152
	cell = row.insertCell(-1);
153
	cell.textContent = from.substring(0, from.indexOf("@"));
154
155
	cell = row.insertCell(-1);
156
157
	let el = document.createElement("abbr");
158
	el.textContent = getCountryFlag(ae.getExtMsgCcode(i));
159
	el.title = ae.getExtMsgCname(i);
160
	cell.appendChild(el);
161
162
	el = document.createElement("span");
163
	el.textContent = " " + from2;
164
	cell.appendChild(el);
165
166
	cell = row.insertCell(-1);
167
	cell.textContent = ae.getExtMsgEnvTo(i);
168
	cell.className = (ae.getExtMsgEnvTo(i).length === 16) ? "mono" : "";
169
170
	cell = row.insertCell(-1);
171
	el = document.createElement("input");
172
	el.className = "delMsg";
173
	el.type = "checkbox";
174
	el.setAttribute("data-id", ae.getExtMsgId(i));
175
	el.onchange = function() {deleteButtonShow(this.checked);};
176
	cell.appendChild(el);
177
}
178
179
function addMessages() {
180
	const maxExt = ae.getExtMsgCount();
181
	const maxInt = ae.getIntMsgCount();
182
183
	let numExt = 0;
184
	let numInt = 0;
185
186
	for (let i = 0; i < (page * 20) + 20; i++) {
187
		const tsInt = (numInt < maxInt) ? ae.getIntMsgTime(numInt) : 0;
188
		const tsExt = (numExt < maxExt) ? ae.getExtMsgTime(numExt) : 0;
189
		if (tsInt === 0 && tsExt === 0) break;
190
191
		if (tsInt !== 0 && (tsExt === 0 || tsInt > tsExt)) {
192
			if (i < (page * 20)) {
193
				numInt++;
194
				continue;
195
			}
196
197
			addIntMessage(numInt);
198
			numInt++;
199
		} else if (tsExt !== 0) {
200
			if (i < (page * 20)) {
201
				numExt++;
202
				continue;
203
			}
204
205
			addExtMessage(numExt);
206
			numExt++;
207
		}
208
	}
209
}
210
211
function addFile(num) {
212
	const table = document.getElementById("tbody_files");
213
	const row = table.insertRow(-1);
214
215
	let cell = row.insertCell(-1);
216
	cell.textContent = new Date(ae.getUplMsgTime(num) * 1000).toISOString().slice(0, 10);
217
218
	cell = row.insertCell(-1);
219
	cell.textContent = (ae.getUplMsgBytes(num) / 1024).toFixed(2);
220
221
	cell = row.insertCell(-1);
222
	cell.textContent = ae.getUplMsgTitle(num);
223
224
	cell = row.insertCell(-1);
225
	cell.innerHTML = "<button type=\"button\">D</button>";
226
	cell.children[0].onclick = function() {ae.downloadUplMsg(num);};
227
228
	cell = row.insertCell(-1);
229
	cell.innerHTML = "<button type=\"button\">X</button>";
230
	cell.children[0].onclick = function() {
231
		ae.Message_Delete([ae.getUplMsgIdHex(num)], function(error) {
232
			if (error === 0) {
233
				row.remove();
234
			} else {
235
				console.log("Failed deleting file");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
236
			}
237
		});
238
	};
239
}
240
241
function deleteAccount(uid) {
242
	const tbl = document.getElementById("tbody_admin");
243
244
	let rowid = -1;
245
246
	for (let i = 0; i < tbl.rows.length; i++) {
247
		if (uid === tbl.rows[i].cells[0].textContent) {
248
			rowid = i;
249
			break;
250
		}
251
	}
252
253
	if (rowid === -1) return;
254
255
	ae.Account_Delete(uid, function(error) {
256
		if (error === 0) {
257
			tbl.deleteRow(rowid);
258
		} else {
259
			console.log("Failed to destroy account");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
260
		}
261
	});
262
}
263
264
function setAccountLevel(uid, level) {
265
	const tbl = document.getElementById("tbody_admin");
266
267
	let rowid = -1;
268
269
	for (let i = 0; i < tbl.rows.length; i++) {
270
		if (tbl.rows[i].cells[0].textContent === ae.uidToName(uid)) {
271
			rowid = i;
272
			break;
273
		}
274
	}
275
276
	if (rowid === -1) return;
277
278
	ae.Account_Update(uid, level, function(error) {
279
		if (error !== 0) {
280
			console.log("Failed to set account level");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
281
			return;
282
		}
283
284
		tbl.rows[rowid].cells[4].textContent = level;
285
286
		if (level === 0) {
287
			tbl.rows[rowid].cells[5].children[0].disabled = false;
288
			tbl.rows[rowid].cells[6].children[0].disabled = true;
289
		} else if (level === ae.getLevelMax()) {
290
			tbl.rows[rowid].cells[5].children[0].disabled = true;
291
			tbl.rows[rowid].cells[6].children[0].disabled = false;
292
		} else {
293
			tbl.rows[rowid].cells[5].children[0].disabled = false;
294
			tbl.rows[rowid].cells[6].children[0].disabled = false;
295
		}
296
297
		tbl.rows[rowid].cells[5].children[0].onclick = function() {setAccountLevel(uid, level + 1);};
298
		tbl.rows[rowid].cells[6].children[0].onclick = function() {setAccountLevel(uid, level - 1);};
299
	});
300
}
301
302
function deleteAddress(num) {
303
	if (num < 0) return;
304
305
	let btns = document.getElementById("tbody_opt_addr").getElementsByTagName("button");
306
	for (let i = 0; i < btns.length; i++) btns[i].disabled = true;
307
308
	ae.Address_Delete(num, function(error) {
309
		if (error !== 0) {
310
			console.log("Failed to delete address");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
311
			return;
312
		}
313
314
		document.getElementById("tbody_opt_addr").deleteRow(num);
315
		document.getElementById("send_from").remove(num);
316
317
		document.getElementById("addr_use_normal").textContent = ae.getAddressCountNormal();
318
		document.getElementById("addr_use_shield").textContent = ae.getAddressCountShield();
319
320
		if (ae.getAddressCountNormal() < ae.getLimitNormalA(ae.getOwnLevel())) document.getElementById("btn_newaddress").disabled = false;
321
		if (ae.getAddressCountShield() < ae.getLimitShieldA(ae.getOwnLevel())) document.getElementById("btn_newshieldaddress").disabled = false;
322
323
		ae.Private_Update(function(error2) {
324
			if (error2 !== 0) console.log("Failed to update the Private field");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
325
326
			btns = document.getElementById("tbody_opt_addr").getElementsByTagName("button");
327
			for (let i = 0; i < btns.length; i++) btns[i].disabled = false;
328
		});
329
	});
330
}
331
332
function addCellbox(row, checked) {
333
	let cell = row.insertCell(-1);
334
	let el = document.createElement("input");
335
	el.type = "checkbox";
336
	el.checked = checked;
337
	cell.appendChild(el);
338
}
339
340
function addAddress(num) {
341
	const addrTable = document.getElementById("tbody_opt_addr");
342
	const row = addrTable.insertRow(-1);
343
344
	let cell = row.insertCell(-1);
345
	cell.textContent = ae.getAddress(num);
346
	if (cell.textContent.length === 16) cell.className = "mono";
347
	cell.onclick = function() {navigator.clipboard.writeText(((this.textContent.length === 16) ? ae.shieldMix(this.textContent) : this.textContent) + "@" + ae.getDomainEml());};
348
349
	addCellbox(row, ae.getAddressAccExt(num));
350
	addCellbox(row, ae.getAddressAccInt(num));
351
	addCellbox(row, ae.getAddressAllVer(num));
352
	addCellbox(row, ae.getAddressAttach(num));
353
	addCellbox(row, ae.getAddressSecure(num));
354
	addCellbox(row, ae.getAddressOrigin(num));
355
356
	cell = row.insertCell(-1);
357
	let el = document.createElement("button");
358
	el.type = "button";
359
	el.textContent = "X";
360
	el.onclick = function() {deleteAddress(num);};
361
	cell.appendChild(el);
362
363
	el = document.createElement("option");
364
	el.value = ae.getAddress(num);
365
	el.textContent = ae.getAddress(num) + "@" + ae.getDomainEml();
366
	document.getElementById("send_from").appendChild(el);
367
}
368
369
function clearMessages() {
370
	document.getElementById("tbd_inbox").innerHTML = "";
371
	document.getElementById("tbd_snbox").innerHTML = "";
372
	document.getElementById("tbody_files").innerHTML = "";
373
}
374
375
function delMsgs(tblName, btnName) {
376
	const cbs = document.getElementsByClassName("delMsg");
377
	const ids = [];
378
379
	for (let i = 0; i < cbs.length; i++) {
380
		if (cbs[i].checked) ids.push(cbs[i].getAttribute("data-id"));
381
	}
382
383
	if (ids.length > 0) ae.Message_Delete(ids, function(error) {
384
		if (error === 0) {
385
			clearMessages();
386
			addMessages();
387
			document.getElementById(btnName).hidden = true;
388
		} else {
389
			console.log("Failed to delete messages");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
390
		}
391
	});
392
}
393
394
function deleteContact(email) {
395
	const tbl = document.getElementById("tbody_notes_contact");
396
	const rows = tbl.rows;
397
398
	for (let i = 0; i < rows.length; i++) {
399
		if (email === rows[i].cells[0].textContent) {
400
			ae.deleteContact(i);
401
			tbl.deleteRow(i);
402
			break;
403
		}
404
	}
405
406
	document.getElementById("btn_savenotes").hidden = false;
407
}
408
409
function addContactToTable(mail, name, note) {
410
	const contactTable = document.getElementById("tbody_notes_contact");
411
	const row = contactTable.insertRow(-1);
412
	const cellMail = row.insertCell(-1);
413
	const cellName = row.insertCell(-1);
414
	const cellNote = row.insertCell(-1);
415
	const cellBtnD = row.insertCell(-1);
416
417
	cellMail.className = "left";
418
	cellName.className = "left";
419
	cellNote.className = "left";
420
421
	cellMail.textContent = mail;
422
	cellName.textContent = name;
423
	cellNote.textContent = note;
424
	cellBtnD.innerHTML = "<button type=\"button\">X</button>";
425
426
	cellBtnD.onclick = function() {deleteContact(mail);};
427
}
428
429
function addRowAdmin(num) {
430
	const table = document.getElementById("tbody_admin");
431
432
	const row = table.insertRow(-1);
433
	const cellUn = row.insertCell(-1);
434
	const cellMb = row.insertCell(-1);
435
	const cellNa = row.insertCell(-1);
436
	const cellSa = row.insertCell(-1);
437
	const cellLv = row.insertCell(-1);
438
	const cellBtnPl = row.insertCell(-1);
439
	const cellBtnMn = row.insertCell(-1);
440
	const cellBtnDe = row.insertCell(-1);
441
442
	cellUn.textContent = ae.uidToName(ae.admin_getUserUid(num));
443
	cellMb.textContent = Math.round(ae.admin_getUserKib(num) / 1024);
444
	cellNa.textContent = ae.admin_getUserNrm(num);
445
	cellSa.textContent = ae.admin_getUserShd(num);
446
	cellLv.textContent = ae.admin_getUserLvl(num);
447
	cellBtnPl.innerHTML = "<button type=\"button\">+</button>";
448
	cellBtnMn.innerHTML = "<button type=\"button\">-</button>";
449
	cellBtnDe.innerHTML = "<button type=\"button\">X</button>";
450
451
	cellUn.className = "mono";
452
	if (ae.admin_getUserLvl(num) === ae.getLevelMax()) cellBtnPl.children[0].disabled = true;
453
	if (ae.admin_getUserLvl(num) === 0) cellBtnMn.children[0].disabled = true;
454
455
	const uid = ae.admin_getUserUid(num);
456
	const currentLevel = ae.admin_getUserLvl(num);
457
	cellBtnPl.children[0].onclick = function() {setAccountLevel(uid, currentLevel + 1);};
458
	cellBtnMn.children[0].onclick = function() {setAccountLevel(uid, currentLevel - 1);};
459
	cellBtnDe.children[0].onclick = function() {deleteAccount(uid);};
460
}
461
462
function reloadInterface() {
463
	if (!ae.isUserAdmin()) document.getElementById("btn_toadmin").hidden = true;
464
	document.getElementById("div_begin").hidden = true;
465
	document.getElementById("div_allears").hidden = false;
466
467
	clearMessages();
468
	document.getElementById("tbody_admin").innerHTML = "";
469
	document.getElementById("tbody_files").innerHTML = "";
470
	document.getElementById("tbody_notes_contact").innerHTML = "";
471
	document.getElementById("tbody_opt_addr").innerHTML = "";
472
473
	// Contacts
474
	for (let i = 0; i < ae.getContactCount(); i++) {
475
		addContactToTable(
476
			ae.getContactMail(i),
477
			ae.getContactName(i),
478
			ae.getContactNote(i)
479
		);
480
	}
481
482
	// Addresses
483
	for (let i = 0; i < ae.getAddressCount(); i++) {
484
		addAddress(i);
485
	}
486
487
	document.getElementById("addr_use_normal").textContent = ae.getAddressCountNormal();
488
	document.getElementById("addr_use_shield").textContent = ae.getAddressCountShield();
489
	document.getElementById("addr_max_normal").textContent = ae.getLimitNormalA(ae.getOwnLevel());
490
	document.getElementById("addr_max_shield").textContent = ae.getLimitShieldA(ae.getOwnLevel());
491
492
	if (ae.getAddressCountNormal() >= ae.getLimitNormalA(ae.getOwnLevel())) document.getElementById("btn_newaddress").disabled = true;
493
	if (ae.getAddressCountShield() >= ae.getLimitShieldA(ae.getOwnLevel())) document.getElementById("btn_newshieldaddress").disabled = true;
494
495
	if (ae.isUserAdmin()) {
496
		const tblLimits = document.getElementById("tbl_limits");
497
		for (let i = 0; i < 4; i++) {
498
			tblLimits.rows[i].cells[1].children[0].value = ae.getLimitStorage(i);
499
			tblLimits.rows[i].cells[2].children[0].value = ae.getLimitNormalA(i);
500
			tblLimits.rows[i].cells[3].children[0].value = ae.getLimitShieldA(i);
501
		}
502
503
		document.getElementById("btn_admin_savelimits").onclick = function() {
504
			const storageLimit = [];
505
			const addrNrmLimit = [];
506
			const addrShdLimit = [];
507
508
			for (let i = 0; i < 4; i++) {
509
				storageLimit[i] = tblLimits.rows[i].cells[1].children[0].value;
510
				addrNrmLimit[i] = tblLimits.rows[i].cells[2].children[0].value;
511
				addrShdLimit[i] = tblLimits.rows[i].cells[3].children[0].value;
512
			}
513
514
			ae.setLimits(storageLimit, addrNrmLimit, addrShdLimit, function(error) {
515
				if (error !== 0) {
516
					console.log("Failed to update limits");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
517
				}
518
			});
519
		};
520
521
		ae.Account_Browse(function(error) {
0 ignored issues
show
Unused Code introduced by
The parameter error is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
522
			for (let i = 0; i < ae.admin_getUserCount(); i++) {
523
				addRowAdmin(i);
524
			}
525
		});
526
	}
527
}
528
529
document.getElementById("btn_inbox_prev").onclick = function() {
530
	if (page > 0) {
531
		page--;
532
		clearMessages();
533
		addMessages();
534
		this.disabled = (page === 0);
535
	}
536
};
537
538
document.getElementById("btn_inbox_next").onclick = function() {
539
// TODO: Check if page too high
540
//	if (page > 0) {
541
		page++;
542
		clearMessages();
543
		addMessages();
544
		document.getElementById("btn_inbox_prev").disabled = false;
545
//	}
546
};
547
548
document.getElementById("btn_enter").onclick = function() {
549
	const txtUmk = document.getElementById("txt_umk");
550
	if (!txtUmk.reportValidity()) return;
551
552
	const btn = this;
553
	btn.disabled = true;
554
555
	ae.setKeys(txtUmk.value, function(success) {
556
		if (!success) {
557
			document.getElementById("begin_message").hidden = false;
558
			document.getElementById("begin_message").textContent = "Error: Invalid key format";
559
			btn.disabled = false;
560
			return;
561
		}
562
563
		ae.Message_Browse(false, true, function(error) {
564
			if (error !== 0) {
565
				document.getElementById("begin_message").hidden = false;
566
				document.getElementById("begin_message").textContent = "Error: " + ae.getErrorMessage(error);
567
				btn.disabled = false;
568
				return;
569
			}
570
571
			txtUmk.value = "";
572
			reloadInterface();
573
			addMessages();
574
		});
575
	});
576
};
577
578
document.getElementById("btn_refresh").onclick = function() {
579
	const btn = this;
580
	btn.disabled = true;
581
582
	ae.Message_Browse(true, false, function(error) {
583
		if (error === 0) {
584
			clearMessages();
585
			addMessages();
586
			for (let i = ae.getUplMsgCount() - 1; i >= 0; i--) {addFile(i);}
587
		} else {
588
			console.log("Failed to refresh");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
589
		}
590
591
		btn.disabled = false;
592
	});
593
};
594
595
document.getElementById("btn_contact_add").onclick = function() {
596
	const txtMail = document.getElementById("txt_newcontact_mail");
597
	const txtName = document.getElementById("txt_newcontact_name");
598
	const txtNote = document.getElementById("txt_newcontact_note");
599
600
	addContactToTable(txtMail.value, txtName.value, txtNote.value);
601
	ae.addContact(txtMail.value, txtName.value, txtNote.value);
602
603
	txtMail.value = "";
604
	txtName.value = "";
605
	txtNote.value = "";
606
607
	document.getElementById("btn_savenotes").hidden = false;
608
};
609
610
document.getElementById("btn_savenotes").onclick = function() {
611
	ae.Private_Update(function(error) {
612
		if (error === 0) {
613
			document.getElementById("btn_savenotes").hidden = true;
614
		} else {
615
			console.log("Failed to save note data");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
616
		}
617
	});
618
};
619
620
document.getElementById("btn_msgdel").onclick = function() {
621
	delMsgs("tbody_inbox", "btn_msgdel");
622
};
623
624
document.getElementById("btn_sentdel").onclick = function() {
625
	delMsgs("tbody_sentbox", "btn_sentdel");
626
};
627
628
document.getElementById("btn_send").onclick = function() {
629
	const btn = this;
630
	btn.disabled = true;
631
632
	const sfrom = document.getElementById("send_from");
633
	const stitle = document.getElementById("send_title");
634
	const sto = document.getElementById("send_to");
635
	const sbody = document.getElementById("send_body");
636
637
	if (!stitle.reportValidity() || !sto.reportValidity() || !sbody.reportValidity()) return;
638
639
	ae.Message_Create(stitle.value, sbody.value, sfrom.value, sto.value, null, null, function(error) {
640
		if (error === 0) {
641
			stitle.value = "";
642
			sto.value = "";
643
			sbody.value = "";
644
		} else {
645
			console.log("Failed sending message: " + ae.getErrorMessage(error));
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
646
		}
647
648
		btn.disabled = false;
649
	});
650
};
651
652
document.getElementById("btn_newaddress").onclick = function() {
653
	if (ae.getAddressCountNormal() >= ae.getLimitNormalA(ae.getOwnLevel())) return;
654
655
	const txtNewAddr = document.getElementById("txt_newaddress");
656
	if (!txtNewAddr.reportValidity()) return;
657
658
	const btnN = document.getElementById("btn_newaddress");
659
	const btnS = document.getElementById("btn_newshieldaddress");
660
	btnN.disabled = true;
661
	btnS.disabled = true;
662
663
	ae.Address_Create(txtNewAddr.value, function(error1) {
664
		if (error1 === 0) {
665
			ae.Private_Update(function(error2) {
666
				document.getElementById("addr_use_normal").textContent = ae.getAddressCountNormal();
667
				addAddress(ae.getAddressCount() - 1);
668
				txtNewAddr.value = "";
669
670
				if (error2 !== 0) console.log("Failed to update the Private field");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
671
				if (ae.getAddressCountNormal() < ae.getLimitNormalA(ae.getOwnLevel())) btnN.disabled = false;
672
				if (ae.getAddressCountShield() < ae.getLimitShieldA(ae.getOwnLevel())) btnS.disabled = false;
673
			});
674
		} else {
675
			console.log("Failed to add address");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
676
			if (ae.getAddressCountNormal() < ae.getLimitNormalA(ae.getOwnLevel())) btnN.disabled = false;
677
			if (ae.getAddressCountShield() < ae.getLimitShieldA(ae.getOwnLevel())) btnS.disabled = false;
678
		}
679
	});
680
};
681
682
document.getElementById("btn_newshieldaddress").onclick = function() {
683
	if (ae.getLimitShieldA() >= ae.getLimitShieldA(ae.getOwnLevel())) return;
684
685
	const btnN = document.getElementById("btn_newaddress");
686
	const btnS = document.getElementById("btn_newshieldaddress");
687
	btnN.disabled = true;
688
	btnS.disabled = true;
689
690
	ae.Address_Create("SHIELD", function(error1) {
691
		if (error1 !== 0) {
692
			console.log("Failed to add Shield address");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
693
			if (ae.getAddressCountNormal() < ae.getLimitNormalA(ae.getOwnLevel())) btnN.disabled = false;
694
			if (ae.getAddressCountShield() < ae.getLimitShieldA(ae.getOwnLevel())) btnS.disabled = false;
695
			return;
696
		}
697
698
		ae.Private_Update(function(error2) {
699
			document.getElementById("addr_use_shield").textContent = ae.getAddressCountShield();
700
			addAddress(ae.getAddressCount() - 1);
701
702
			if (error2 !== 0) console.log("Failed to update the Private field");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
703
			if (ae.getAddressCountNormal() < ae.getLimitNormalA(ae.getOwnLevel())) btnN.disabled = false;
704
			if (ae.getAddressCountShield() < ae.getLimitShieldA(ae.getOwnLevel())) btnS.disabled = false;
705
		});
706
	});
707
};
708
709
document.getElementsByTagName("fieldset")[0].onchange = function() {
710
	document.getElementById("btn_saveaddrdata").hidden = false;
711
};
712
713
document.getElementById("btn_saveaddrdata").onclick = function() {
714
	this.disabled = true;
715
716
	const tbl = document.getElementById("tbody_opt_addr");
717
718
	for (let i = 0; i < tbl.rows.length; i++) {
719
		ae.setAddressAccExt(i, tbl.rows[i].cells[1].firstChild.checked);
720
		ae.setAddressAccInt(i, tbl.rows[i].cells[2].firstChild.checked);
721
		ae.setAddressAllVer(i, tbl.rows[i].cells[3].firstChild.checked);
722
		ae.setAddressAttach(i, tbl.rows[i].cells[4].firstChild.checked);
723
		ae.setAddressSecure(i, tbl.rows[i].cells[5].firstChild.checked);
724
		ae.setAddressOrigin(i, tbl.rows[i].cells[6].firstChild.checked);
725
	}
726
727
	const btn = document.getElementById("btn_saveaddrdata");
728
729
	ae.Address_Update(function(error) {
730
		if (!error) {
731
			btn.hidden = true;
732
		} else {
733
			console.log("Failed to save address data");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
734
		}
735
736
		btn.disabled = false;
737
	});
738
};
739
740
document.getElementById("btn_admin_reg").onclick = function() {
741
	const txtEpk = document.getElementById("txt_reg_epk");
742
	const txtUak = document.getElementById("txt_reg_uak");
743
744
	if (!txtEpk.reportValidity() || !txtUak.reportValidity()) return;
745
746
	const btn = document.getElementById("btn_admin_reg");
747
	btn.disabled = true;
748
749
	ae.Account_Create(txtUak.value, txtEpk.value, function(error) {
750
		if (error === 0) {
751
			addRowAdmin(ae.admin_getUserCount() - 1);
752
			txtEpk.value = "";
753
			txtUak.value = "";
754
		} else {
755
			console.log("Failed to add account");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
756
		}
757
	});
758
759
	btn.disabled = false;
760
};
761
762
document.getElementById("upfile").onchange = function() {
763
	const fn = this.files[0].name;
764
	const reader = new FileReader();
765
766
	reader.onload = function() {
767
		ae.Message_Upload(fn, new Uint8Array(reader.result), function(error) {
768
			if (error === 0) {
769
				addFile(0);
770
				document.getElementById("upfile").value = "";
771
			} else {
772
				console.log("Failed to upload file");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
773
			}
774
		});
775
	};
776
777
	reader.readAsArrayBuffer(this.files[0]);
778
};
779
780
function navNotesMenu(num) {
781
	for (let i = 0; i < 3; i++) {
782
		const isCurrent = (i === num);
783
		document.getElementById("div_notes").children[0].children[i].disabled = isCurrent;
784
		document.getElementById("div_notes").children[1 + i].hidden = !isCurrent;
785
	}
786
}
787
788
let btns = document.getElementsByTagName("nav")[0].getElementsByTagName("button");
789
btns[0].onclick = function() {navMenu(0);};
790
btns[1].onclick = function() {navMenu(1);};
791
btns[2].onclick = function() {navMenu(2);};
792
btns[3].onclick = function() {navMenu(3);};
793
btns[4].onclick = function() {navMenu(4);};
794
795
btns = document.getElementById("div_notes").getElementsByTagName("button");
796
btns[0].onclick = function() {navNotesMenu(0);};
797
btns[1].onclick = function() {navNotesMenu(1);};
798
btns[2].onclick = function() {navNotesMenu(2);};
799
800
document.getElementById("txt_umk").onkeyup = function(e) {
801
	if (e.key === "Enter") document.getElementById("btn_enter").click();
802
};
803
804
navMenu(0);
805
806
});
807